package org.gap.service;

import java.util.Calendar;
import java.util.List;
import java.util.Set;

import org.gap.dao.AdressesDAO;
import org.gap.dao.AdressesTiersDAO;
import org.gap.dao.TiersDAO;
import org.gap.dao.TiersModifDAO;
import org.gap.dao.TiersRibDAO;
import org.gap.dao.UtilisateursDAO;
import org.gap.dao.UtilisateursGroupeDAO;

import org.gap.domain.Adresses;
import org.gap.domain.AdressesTiers;
import org.gap.domain.Tiers;
import org.gap.domain.TiersModif;
import org.gap.domain.TiersRib;
import org.gap.domain.Utilisateurs;
import org.gap.domain.UtilisateursGroupe;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

/**
 * Spring service that handles CRUD requests for Utilisateurs entities
 * 
 */

@Service("UtilisateursService")
@Transactional
public class UtilisateursServiceImpl implements UtilisateursService {

	/**
	 * DAO injected by Spring that manages Adresses entities
	 * 
	 */
	@Autowired
	private AdressesDAO adressesDAO;

	/**
	 * DAO injected by Spring that manages AdressesTiers entities
	 * 
	 */
	@Autowired
	private AdressesTiersDAO adressesTiersDAO;

	/**
	 * DAO injected by Spring that manages Tiers entities
	 * 
	 */
	@Autowired
	private TiersDAO tiersDAO;

	/**
	 * DAO injected by Spring that manages TiersModif entities
	 * 
	 */
	@Autowired
	private TiersModifDAO tiersModifDAO;

	/**
	 * DAO injected by Spring that manages TiersRib entities
	 * 
	 */
	@Autowired
	private TiersRibDAO tiersRibDAO;

	/**
	 * DAO injected by Spring that manages Utilisateurs entities
	 * 
	 */
	@Autowired
	private UtilisateursDAO utilisateursDAO;

	/**
	 * DAO injected by Spring that manages UtilisateursGroupe entities
	 * 
	 */
	@Autowired
	private UtilisateursGroupeDAO utilisateursGroupeDAO;

	/**
	 * Instantiates a new UtilisateursServiceImpl.
	 *
	 */
	public UtilisateursServiceImpl() {
	}

	/**
	 * Save an existing TiersModif entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursTiersModifs(String usrUser, TiersModif related_tiersmodifs) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		TiersModif existingtiersModifs = tiersModifDAO.findTiersModifByPrimaryKey(related_tiersmodifs.getTmoTiers(), related_tiersmodifs.getTmoNomChampModif(), related_tiersmodifs.getTmoDateModification());

		// copy into the existing record to preserve existing relationships
		if (existingtiersModifs != null) {
			existingtiersModifs.setTmoTiers(related_tiersmodifs.getTmoTiers());
			existingtiersModifs.setTmoNomChampModif(related_tiersmodifs.getTmoNomChampModif());
			existingtiersModifs.setTmoDateModification(related_tiersmodifs.getTmoDateModification());
			existingtiersModifs.setTmoAncienneVal(related_tiersmodifs.getTmoAncienneVal());
			existingtiersModifs.setTmoNouvelleVal(related_tiersmodifs.getTmoNouvelleVal());
			related_tiersmodifs = existingtiersModifs;
		}

		related_tiersmodifs.setUtilisateurs(utilisateurs);
		utilisateurs.getTiersModifs().add(related_tiersmodifs);
		related_tiersmodifs = tiersModifDAO.store(related_tiersmodifs);
		tiersModifDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing UtilisateursGroupe entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursUtilisateursGroupes(String usrUser, UtilisateursGroupe related_utilisateursgroupes) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		UtilisateursGroupe existingutilisateursGroupes = utilisateursGroupeDAO.findUtilisateursGroupeByPrimaryKey(related_utilisateursgroupes.getUgrGroupe(), related_utilisateursgroupes.getUgrUser());

		// copy into the existing record to preserve existing relationships
		if (existingutilisateursGroupes != null) {
			existingutilisateursGroupes.setUgrGroupe(related_utilisateursgroupes.getUgrGroupe());
			existingutilisateursGroupes.setUgrUser(related_utilisateursgroupes.getUgrUser());
			related_utilisateursgroupes = existingutilisateursGroupes;
		}

		related_utilisateursgroupes.setUtilisateurs(utilisateurs);
		utilisateurs.getUtilisateursGroupes().add(related_utilisateursgroupes);
		related_utilisateursgroupes = utilisateursGroupeDAO.store(related_utilisateursgroupes);
		utilisateursGroupeDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Load an existing Utilisateurs entity
	 * 
	 */
	@Transactional
	public Set<Utilisateurs> loadUtilisateurss() {
		return utilisateursDAO.findAllUtilisateurss();
	}

	/**
	 * Delete an existing TiersModif entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursTiersModifs(String utilisateurs_usrUser, Integer related_tiersmodifs_tmoTiers, String related_tiersmodifs_tmoNomChampModif, Calendar related_tiersmodifs_tmoDateModification) {
		TiersModif related_tiersmodifs = tiersModifDAO.findTiersModifByPrimaryKey(related_tiersmodifs_tmoTiers, related_tiersmodifs_tmoNomChampModif, related_tiersmodifs_tmoDateModification, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_tiersmodifs.setUtilisateurs(null);
		utilisateurs.getTiersModifs().remove(related_tiersmodifs);

		tiersModifDAO.remove(related_tiersmodifs);
		tiersModifDAO.flush();

		return utilisateurs;
	}

	/**
	 * Return all Utilisateurs entity
	 * 
	 */
	@Transactional
	public List<Utilisateurs> findAllUtilisateurss(Integer startResult, Integer maxRows) {
		return new java.util.ArrayList<Utilisateurs>(utilisateursDAO.findAllUtilisateurss(startResult, maxRows));
	}

	/**
	 */
	@Transactional
	public Utilisateurs findUtilisateursByPrimaryKey(String usrUser) {
		return utilisateursDAO.findUtilisateursByPrimaryKey(usrUser);
	}

	/**
	 * Delete an existing TiersRib entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursTiersRibsForTrbUserCreation(String utilisateurs_usrUser, Integer related_tiersribsfortrbusercreation_trbTiers, Integer related_tiersribsfortrbusercreation_trbRib) {
		TiersRib related_tiersribsfortrbusercreation = tiersRibDAO.findTiersRibByPrimaryKey(related_tiersribsfortrbusercreation_trbTiers, related_tiersribsfortrbusercreation_trbRib, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_tiersribsfortrbusercreation.setUtilisateursByTrbUserCreation(null);
		utilisateurs.getTiersRibsForTrbUserCreation().remove(related_tiersribsfortrbusercreation);

		tiersRibDAO.remove(related_tiersribsfortrbusercreation);
		tiersRibDAO.flush();

		return utilisateurs;
	}

	/**
	 * Delete an existing AdressesTiers entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursAdressesTiersesForAdtUserModification(String utilisateurs_usrUser, Integer related_adressestiersesforadtusermodification_adtAdresse, Integer related_adressestiersesforadtusermodification_adtTiers, String related_adressestiersesforadtusermodification_adtTypeAdresse, String related_adressestiersesforadtusermodification_adtEtatAffectation, Calendar related_adressestiersesforadtusermodification_adtFinAffectation) {
		AdressesTiers related_adressestiersesforadtusermodification = adressesTiersDAO.findAdressesTiersByPrimaryKey(related_adressestiersesforadtusermodification_adtAdresse, related_adressestiersesforadtusermodification_adtTiers, related_adressestiersesforadtusermodification_adtTypeAdresse, related_adressestiersesforadtusermodification_adtEtatAffectation, related_adressestiersesforadtusermodification_adtFinAffectation, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_adressestiersesforadtusermodification.setUtilisateursByAdtUserModification(null);
		utilisateurs.getAdressesTiersesForAdtUserModification().remove(related_adressestiersesforadtusermodification);

		adressesTiersDAO.remove(related_adressestiersesforadtusermodification);
		adressesTiersDAO.flush();

		return utilisateurs;
	}

	/**
	 * Delete an existing Tiers entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursTiers(String utilisateurs_usrUser, Integer related_tiers_tieTiers) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);
		Tiers related_tiers = tiersDAO.findTiersByPrimaryKey(related_tiers_tieTiers, -1, -1);

		utilisateurs.setTiers(null);
		related_tiers.getUtilisateurses().remove(utilisateurs);
		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		related_tiers = tiersDAO.store(related_tiers);
		tiersDAO.flush();

		tiersDAO.remove(related_tiers);
		tiersDAO.flush();

		return utilisateurs;
	}

	/**
	 * Delete an existing AdressesTiers entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursAdressesTiersesForAdtUserCreation(String utilisateurs_usrUser, Integer related_adressestiersesforadtusercreation_adtAdresse, Integer related_adressestiersesforadtusercreation_adtTiers, String related_adressestiersesforadtusercreation_adtTypeAdresse, String related_adressestiersesforadtusercreation_adtEtatAffectation, Calendar related_adressestiersesforadtusercreation_adtFinAffectation) {
		AdressesTiers related_adressestiersesforadtusercreation = adressesTiersDAO.findAdressesTiersByPrimaryKey(related_adressestiersesforadtusercreation_adtAdresse, related_adressestiersesforadtusercreation_adtTiers, related_adressestiersesforadtusercreation_adtTypeAdresse, related_adressestiersesforadtusercreation_adtEtatAffectation, related_adressestiersesforadtusercreation_adtFinAffectation, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_adressestiersesforadtusercreation.setUtilisateursByAdtUserModification(null);
		utilisateurs.getAdressesTiersesForAdtUserModification().remove(related_adressestiersesforadtusercreation);

		adressesTiersDAO.remove(related_adressestiersesforadtusercreation);
		adressesTiersDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing Utilisateurs entity
	 * 
	 */
	@Transactional
	public void saveUtilisateurs(Utilisateurs utilisateurs) {
		Utilisateurs existingUtilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs.getUsrUser());

		if (existingUtilisateurs != null) {
			if (existingUtilisateurs != utilisateurs) {
				existingUtilisateurs.setUsrUser(utilisateurs.getUsrUser());
				existingUtilisateurs.setUsrPassword(utilisateurs.getUsrPassword());
				existingUtilisateurs.setUsrService(utilisateurs.getUsrService());
				existingUtilisateurs.setUsrMail(utilisateurs.getUsrMail());
				existingUtilisateurs.setUsrEnabled(utilisateurs.getUsrEnabled());
			}
			utilisateurs = utilisateursDAO.store(existingUtilisateurs);
		} else {
			utilisateurs = utilisateursDAO.store(utilisateurs);
		}
		utilisateursDAO.flush();
	}

	/**
	 * Delete an existing Adresses entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursAdressesesForAddUserModification(String utilisateurs_usrUser, Integer related_adressesesforaddusermodification_addAdresse) {
		Adresses related_adressesesforaddusermodification = adressesDAO.findAdressesByPrimaryKey(related_adressesesforaddusermodification_addAdresse, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_adressesesforaddusermodification.setUtilisateursByAddUserModification(null);
		utilisateurs.getAdressesesForAddUserModification().remove(related_adressesesforaddusermodification);

		adressesDAO.remove(related_adressesesforaddusermodification);
		adressesDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing Tiers entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursTiers(String usrUser, Tiers related_tiers) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		Tiers existingtiers = tiersDAO.findTiersByPrimaryKey(related_tiers.getTieTiers());

		// copy into the existing record to preserve existing relationships
		if (existingtiers != null) {
			existingtiers.setTieTiers(related_tiers.getTieTiers());
			existingtiers.setTieIdentClient(related_tiers.getTieIdentClient());
			existingtiers.setTieTypeTiers(related_tiers.getTieTypeTiers());
			existingtiers.setTieLibExterne(related_tiers.getTieLibExterne());
			existingtiers.setTieNationalite(related_tiers.getTieNationalite());
			existingtiers.setTieTelFix(related_tiers.getTieTelFix());
			existingtiers.setTieTelBureau(related_tiers.getTieTelBureau());
			existingtiers.setTieTelPortable(related_tiers.getTieTelPortable());
			existingtiers.setTieFax(related_tiers.getTieFax());
			existingtiers.setTieEMail(related_tiers.getTieEMail());
			existingtiers.setTieDateCreation(related_tiers.getTieDateCreation());
			existingtiers.setTieUserCreation(related_tiers.getTieUserCreation());
			related_tiers = existingtiers;
		}

		utilisateurs.setTiers(related_tiers);
		related_tiers.getUtilisateurses().add(utilisateurs);
		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		related_tiers = tiersDAO.store(related_tiers);
		tiersDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing AdressesTiers entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursAdressesTiersesForAdtUserCreation(String usrUser, AdressesTiers related_adressestiersesforadtusercreation) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		AdressesTiers existingadressesTiersesForAdtUserCreation = adressesTiersDAO.findAdressesTiersByPrimaryKey(related_adressestiersesforadtusercreation.getAdtAdresse(), related_adressestiersesforadtusercreation.getAdtTiers(), related_adressestiersesforadtusercreation.getAdtTypeAdresse(), related_adressestiersesforadtusercreation.getAdtEtatAffectation(), related_adressestiersesforadtusercreation.getAdtFinAffectation());

		// copy into the existing record to preserve existing relationships
		if (existingadressesTiersesForAdtUserCreation != null) {
			existingadressesTiersesForAdtUserCreation.setAdtAdresse(related_adressestiersesforadtusercreation.getAdtAdresse());
			existingadressesTiersesForAdtUserCreation.setAdtTiers(related_adressestiersesforadtusercreation.getAdtTiers());
			existingadressesTiersesForAdtUserCreation.setAdtTypeAdresse(related_adressestiersesforadtusercreation.getAdtTypeAdresse());
			existingadressesTiersesForAdtUserCreation.setAdtEtatAffectation(related_adressestiersesforadtusercreation.getAdtEtatAffectation());
			existingadressesTiersesForAdtUserCreation.setAdtFinAffectation(related_adressestiersesforadtusercreation.getAdtFinAffectation());
			existingadressesTiersesForAdtUserCreation.setAdtDateCreation(related_adressestiersesforadtusercreation.getAdtDateCreation());
			existingadressesTiersesForAdtUserCreation.setAdtDateModification(related_adressestiersesforadtusercreation.getAdtDateModification());
			related_adressestiersesforadtusercreation = existingadressesTiersesForAdtUserCreation;
		} else {
			related_adressestiersesforadtusercreation = adressesTiersDAO.store(related_adressestiersesforadtusercreation);
			adressesTiersDAO.flush();
		}

		related_adressestiersesforadtusercreation.setUtilisateursByAdtUserModification(utilisateurs);
		utilisateurs.getAdressesTiersesForAdtUserModification().add(related_adressestiersesforadtusercreation);
		related_adressestiersesforadtusercreation = adressesTiersDAO.store(related_adressestiersesforadtusercreation);
		adressesTiersDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Delete an existing Utilisateurs entity
	 * 
	 */
	@Transactional
	public void deleteUtilisateurs(Utilisateurs utilisateurs) {
		utilisateursDAO.remove(utilisateurs);
		utilisateursDAO.flush();
	}

	/**
	 * Delete an existing Adresses entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursAdressesesForAddUserCreation(String utilisateurs_usrUser, Integer related_adressesesforaddusercreation_addAdresse) {
		Adresses related_adressesesforaddusercreation = adressesDAO.findAdressesByPrimaryKey(related_adressesesforaddusercreation_addAdresse, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_adressesesforaddusercreation.setUtilisateursByAddUserModification(null);
		utilisateurs.getAdressesesForAddUserModification().remove(related_adressesesforaddusercreation);

		adressesDAO.remove(related_adressesesforaddusercreation);
		adressesDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing TiersRib entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursTiersRibsForTrbUserCreation(String usrUser, TiersRib related_tiersribsfortrbusercreation) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		TiersRib existingtiersRibsForTrbUserCreation = tiersRibDAO.findTiersRibByPrimaryKey(related_tiersribsfortrbusercreation.getTrbTiers(), related_tiersribsfortrbusercreation.getTrbRib());

		// copy into the existing record to preserve existing relationships
		if (existingtiersRibsForTrbUserCreation != null) {
			existingtiersRibsForTrbUserCreation.setTrbTiers(related_tiersribsfortrbusercreation.getTrbTiers());
			existingtiersRibsForTrbUserCreation.setTrbRib(related_tiersribsfortrbusercreation.getTrbRib());
			existingtiersRibsForTrbUserCreation.setTrbPays(related_tiersribsfortrbusercreation.getTrbPays());
			existingtiersRibsForTrbUserCreation.setTrbEtablissement(related_tiersribsfortrbusercreation.getTrbEtablissement());
			existingtiersRibsForTrbUserCreation.setTrbGuichet(related_tiersribsfortrbusercreation.getTrbGuichet());
			existingtiersRibsForTrbUserCreation.setTrbDenomGuichet(related_tiersribsfortrbusercreation.getTrbDenomGuichet());
			existingtiersRibsForTrbUserCreation.setTrbCompte(related_tiersribsfortrbusercreation.getTrbCompte());
			existingtiersRibsForTrbUserCreation.setTrbCleRib(related_tiersribsfortrbusercreation.getTrbCleRib());
			existingtiersRibsForTrbUserCreation.setTrbGuichetDom(related_tiersribsfortrbusercreation.getTrbGuichetDom());
			existingtiersRibsForTrbUserCreation.setTrbDenomDom(related_tiersribsfortrbusercreation.getTrbDenomDom());
			existingtiersRibsForTrbUserCreation.setTrbTitulaire(related_tiersribsfortrbusercreation.getTrbTitulaire());
			existingtiersRibsForTrbUserCreation.setTrbRibValide(related_tiersribsfortrbusercreation.getTrbRibValide());
			existingtiersRibsForTrbUserCreation.setTrbIban(related_tiersribsfortrbusercreation.getTrbIban());
			existingtiersRibsForTrbUserCreation.setTrbBic(related_tiersribsfortrbusercreation.getTrbBic());
			existingtiersRibsForTrbUserCreation.setTrbDateCreation(related_tiersribsfortrbusercreation.getTrbDateCreation());
			existingtiersRibsForTrbUserCreation.setTrbDateModification(related_tiersribsfortrbusercreation.getTrbDateModification());
			related_tiersribsfortrbusercreation = existingtiersRibsForTrbUserCreation;
		} else {
			related_tiersribsfortrbusercreation = tiersRibDAO.store(related_tiersribsfortrbusercreation);
			tiersRibDAO.flush();
		}

		related_tiersribsfortrbusercreation.setUtilisateursByTrbUserCreation(utilisateurs);
		utilisateurs.getTiersRibsForTrbUserCreation().add(related_tiersribsfortrbusercreation);
		related_tiersribsfortrbusercreation = tiersRibDAO.store(related_tiersribsfortrbusercreation);
		tiersRibDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing Adresses entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursAdressesesForAddUserCreation(String usrUser, Adresses related_adressesesforaddusercreation) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		Adresses existingadressesesForAddUserCreation = adressesDAO.findAdressesByPrimaryKey(related_adressesesforaddusercreation.getAddAdresse());

		// copy into the existing record to preserve existing relationships
		if (existingadressesesForAddUserCreation != null) {
			existingadressesesForAddUserCreation.setAddAdresse(related_adressesesforaddusercreation.getAddAdresse());
			existingadressesesForAddUserCreation.setAddTopNpai(related_adressesesforaddusercreation.getAddTopNpai());
			existingadressesesForAddUserCreation.setAddTypeVoie(related_adressesesforaddusercreation.getAddTypeVoie());
			existingadressesesForAddUserCreation.setAddLigne1(related_adressesesforaddusercreation.getAddLigne1());
			existingadressesesForAddUserCreation.setAddLigne2(related_adressesesforaddusercreation.getAddLigne2());
			existingadressesesForAddUserCreation.setAddLigne3(related_adressesesforaddusercreation.getAddLigne3());
			existingadressesesForAddUserCreation.setAddBureauDistrib(related_adressesesforaddusercreation.getAddBureauDistrib());
			existingadressesesForAddUserCreation.setAddDateCreation(related_adressesesforaddusercreation.getAddDateCreation());
			existingadressesesForAddUserCreation.setAddDateModification(related_adressesesforaddusercreation.getAddDateModification());
			related_adressesesforaddusercreation = existingadressesesForAddUserCreation;
		} else {
			related_adressesesforaddusercreation = adressesDAO.store(related_adressesesforaddusercreation);
			adressesDAO.flush();
		}

		related_adressesesforaddusercreation.setUtilisateursByAddUserModification(utilisateurs);
		utilisateurs.getAdressesesForAddUserModification().add(related_adressesesforaddusercreation);
		related_adressesesforaddusercreation = adressesDAO.store(related_adressesesforaddusercreation);
		adressesDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Delete an existing TiersRib entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursTiersRibsForTrbUserModification(String utilisateurs_usrUser, Integer related_tiersribsfortrbusermodification_trbTiers, Integer related_tiersribsfortrbusermodification_trbRib) {
		TiersRib related_tiersribsfortrbusermodification = tiersRibDAO.findTiersRibByPrimaryKey(related_tiersribsfortrbusermodification_trbTiers, related_tiersribsfortrbusermodification_trbRib, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_tiersribsfortrbusermodification.setUtilisateursByTrbUserCreation(null);
		utilisateurs.getTiersRibsForTrbUserCreation().remove(related_tiersribsfortrbusermodification);

		tiersRibDAO.remove(related_tiersribsfortrbusermodification);
		tiersRibDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing Adresses entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursAdressesesForAddUserModification(String usrUser, Adresses related_adressesesforaddusermodification) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		Adresses existingadressesesForAddUserModification = adressesDAO.findAdressesByPrimaryKey(related_adressesesforaddusermodification.getAddAdresse());

		// copy into the existing record to preserve existing relationships
		if (existingadressesesForAddUserModification != null) {
			existingadressesesForAddUserModification.setAddAdresse(related_adressesesforaddusermodification.getAddAdresse());
			existingadressesesForAddUserModification.setAddTopNpai(related_adressesesforaddusermodification.getAddTopNpai());
			existingadressesesForAddUserModification.setAddTypeVoie(related_adressesesforaddusermodification.getAddTypeVoie());
			existingadressesesForAddUserModification.setAddLigne1(related_adressesesforaddusermodification.getAddLigne1());
			existingadressesesForAddUserModification.setAddLigne2(related_adressesesforaddusermodification.getAddLigne2());
			existingadressesesForAddUserModification.setAddLigne3(related_adressesesforaddusermodification.getAddLigne3());
			existingadressesesForAddUserModification.setAddBureauDistrib(related_adressesesforaddusermodification.getAddBureauDistrib());
			existingadressesesForAddUserModification.setAddDateCreation(related_adressesesforaddusermodification.getAddDateCreation());
			existingadressesesForAddUserModification.setAddDateModification(related_adressesesforaddusermodification.getAddDateModification());
			related_adressesesforaddusermodification = existingadressesesForAddUserModification;
		} else {
			related_adressesesforaddusermodification = adressesDAO.store(related_adressesesforaddusermodification);
			adressesDAO.flush();
		}

		related_adressesesforaddusermodification.setUtilisateursByAddUserModification(utilisateurs);
		utilisateurs.getAdressesesForAddUserModification().add(related_adressesesforaddusermodification);
		related_adressesesforaddusermodification = adressesDAO.store(related_adressesesforaddusermodification);
		adressesDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing TiersRib entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursTiersRibsForTrbUserModification(String usrUser, TiersRib related_tiersribsfortrbusermodification) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		TiersRib existingtiersRibsForTrbUserModification = tiersRibDAO.findTiersRibByPrimaryKey(related_tiersribsfortrbusermodification.getTrbTiers(), related_tiersribsfortrbusermodification.getTrbRib());

		// copy into the existing record to preserve existing relationships
		if (existingtiersRibsForTrbUserModification != null) {
			existingtiersRibsForTrbUserModification.setTrbTiers(related_tiersribsfortrbusermodification.getTrbTiers());
			existingtiersRibsForTrbUserModification.setTrbRib(related_tiersribsfortrbusermodification.getTrbRib());
			existingtiersRibsForTrbUserModification.setTrbPays(related_tiersribsfortrbusermodification.getTrbPays());
			existingtiersRibsForTrbUserModification.setTrbEtablissement(related_tiersribsfortrbusermodification.getTrbEtablissement());
			existingtiersRibsForTrbUserModification.setTrbGuichet(related_tiersribsfortrbusermodification.getTrbGuichet());
			existingtiersRibsForTrbUserModification.setTrbDenomGuichet(related_tiersribsfortrbusermodification.getTrbDenomGuichet());
			existingtiersRibsForTrbUserModification.setTrbCompte(related_tiersribsfortrbusermodification.getTrbCompte());
			existingtiersRibsForTrbUserModification.setTrbCleRib(related_tiersribsfortrbusermodification.getTrbCleRib());
			existingtiersRibsForTrbUserModification.setTrbGuichetDom(related_tiersribsfortrbusermodification.getTrbGuichetDom());
			existingtiersRibsForTrbUserModification.setTrbDenomDom(related_tiersribsfortrbusermodification.getTrbDenomDom());
			existingtiersRibsForTrbUserModification.setTrbTitulaire(related_tiersribsfortrbusermodification.getTrbTitulaire());
			existingtiersRibsForTrbUserModification.setTrbRibValide(related_tiersribsfortrbusermodification.getTrbRibValide());
			existingtiersRibsForTrbUserModification.setTrbIban(related_tiersribsfortrbusermodification.getTrbIban());
			existingtiersRibsForTrbUserModification.setTrbBic(related_tiersribsfortrbusermodification.getTrbBic());
			existingtiersRibsForTrbUserModification.setTrbDateCreation(related_tiersribsfortrbusermodification.getTrbDateCreation());
			existingtiersRibsForTrbUserModification.setTrbDateModification(related_tiersribsfortrbusermodification.getTrbDateModification());
			related_tiersribsfortrbusermodification = existingtiersRibsForTrbUserModification;
		} else {
			related_tiersribsfortrbusermodification = tiersRibDAO.store(related_tiersribsfortrbusermodification);
			tiersRibDAO.flush();
		}

		related_tiersribsfortrbusermodification.setUtilisateursByTrbUserCreation(utilisateurs);
		utilisateurs.getTiersRibsForTrbUserCreation().add(related_tiersribsfortrbusermodification);
		related_tiersribsfortrbusermodification = tiersRibDAO.store(related_tiersribsfortrbusermodification);
		tiersRibDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}

	/**
	 * Return a count of all Utilisateurs entity
	 * 
	 */
	@Transactional
	public Integer countUtilisateurss() {
		return ((Long) utilisateursDAO.createQuerySingleResult("select count(o) from Utilisateurs o").getSingleResult()).intValue();
	}

	/**
	 * Delete an existing UtilisateursGroupe entity
	 * 
	 */
	@Transactional
	public Utilisateurs deleteUtilisateursUtilisateursGroupes(String utilisateurs_usrUser, String related_utilisateursgroupes_ugrGroupe, String related_utilisateursgroupes_ugrUser) {
		UtilisateursGroupe related_utilisateursgroupes = utilisateursGroupeDAO.findUtilisateursGroupeByPrimaryKey(related_utilisateursgroupes_ugrGroupe, related_utilisateursgroupes_ugrUser, -1, -1);

		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(utilisateurs_usrUser, -1, -1);

		related_utilisateursgroupes.setUtilisateurs(null);
		utilisateurs.getUtilisateursGroupes().remove(related_utilisateursgroupes);

		utilisateursGroupeDAO.remove(related_utilisateursgroupes);
		utilisateursGroupeDAO.flush();

		return utilisateurs;
	}

	/**
	 * Save an existing AdressesTiers entity
	 * 
	 */
	@Transactional
	public Utilisateurs saveUtilisateursAdressesTiersesForAdtUserModification(String usrUser, AdressesTiers related_adressestiersesforadtusermodification) {
		Utilisateurs utilisateurs = utilisateursDAO.findUtilisateursByPrimaryKey(usrUser, -1, -1);
		AdressesTiers existingadressesTiersesForAdtUserModification = adressesTiersDAO.findAdressesTiersByPrimaryKey(related_adressestiersesforadtusermodification.getAdtAdresse(), related_adressestiersesforadtusermodification.getAdtTiers(), related_adressestiersesforadtusermodification.getAdtTypeAdresse(), related_adressestiersesforadtusermodification.getAdtEtatAffectation(), related_adressestiersesforadtusermodification.getAdtFinAffectation());

		// copy into the existing record to preserve existing relationships
		if (existingadressesTiersesForAdtUserModification != null) {
			existingadressesTiersesForAdtUserModification.setAdtAdresse(related_adressestiersesforadtusermodification.getAdtAdresse());
			existingadressesTiersesForAdtUserModification.setAdtTiers(related_adressestiersesforadtusermodification.getAdtTiers());
			existingadressesTiersesForAdtUserModification.setAdtTypeAdresse(related_adressestiersesforadtusermodification.getAdtTypeAdresse());
			existingadressesTiersesForAdtUserModification.setAdtEtatAffectation(related_adressestiersesforadtusermodification.getAdtEtatAffectation());
			existingadressesTiersesForAdtUserModification.setAdtFinAffectation(related_adressestiersesforadtusermodification.getAdtFinAffectation());
			existingadressesTiersesForAdtUserModification.setAdtDateCreation(related_adressestiersesforadtusermodification.getAdtDateCreation());
			existingadressesTiersesForAdtUserModification.setAdtDateModification(related_adressestiersesforadtusermodification.getAdtDateModification());
			related_adressestiersesforadtusermodification = existingadressesTiersesForAdtUserModification;
		} else {
			related_adressestiersesforadtusermodification = adressesTiersDAO.store(related_adressestiersesforadtusermodification);
			adressesTiersDAO.flush();
		}

		related_adressestiersesforadtusermodification.setUtilisateursByAdtUserModification(utilisateurs);
		utilisateurs.getAdressesTiersesForAdtUserModification().add(related_adressestiersesforadtusermodification);
		related_adressestiersesforadtusermodification = adressesTiersDAO.store(related_adressestiersesforadtusermodification);
		adressesTiersDAO.flush();

		utilisateurs = utilisateursDAO.store(utilisateurs);
		utilisateursDAO.flush();

		return utilisateurs;
	}
}
